import type { AxiosRequest } from './types'

// import { RequestEnum } from '@/enums/httpEnum'
import { RequestEnum } from '../../enums/httpEnum'

// import { isString } from '@/utils/is'
import { isString } from '../is'

// import { setObjToUrlParams } from '@/utils/util.ts'
import { setObjToUrlParams } from '../util'


// 判断是不是开发环境
export default (config: AxiosRequest.RequestConfigAndOption) => {
  const params = config.params || {}
  const data = config.data || false

  if (config.method?.toLowerCase() === RequestEnum.GET) {
    const now = new Date().getTime()
    if (!isString(params)) {
      // get 请求加上时间戳参数，避免从缓存中拿数据。
      config.params = Object.assign(params, { _t: now })
    } else {
      // 兼容restful风格
      config.url = config.url + params + `?_t=${now}`
      config.params = void 0
    }
  } else {
    if (!isString(params)) {
      // 非GET请求如果没有提供data，则将params视为data
      if (!(data instanceof FormData)) {
        if (!data || !Object.keys(data).length) {
          config.data = params
          config.params = void 0
        }
      }

      // 将参数添加到url上 包括params, data
      if (config.joinParamsToUrl) {
        config.url = setObjToUrlParams(
          config.url as string,
          Object.assign({}, params, data)
        )
      }
    } else {
      // 兼容restful风格
      config.url = config.url + params
      config.params = void 0
    }
  }
}